<?php
/**
 * 同一个用户可以有多个不同的收货地址
 *
 * @author <judasnow@gmail.com>
 */
require_once( APPPATH . 'models/base_model.php' );

class User_address_model extends Base_model{

	private $_table_name;

	public function __construct(){
		$this->_table_name = 'user_address';
		parent::__construct( $this->_table_name ); 
	}

	/**
	 * 根据用户 post 过来的信息 , 生成 完整的 address 信息
	 * 并保存之
	 * 
	 * @param $post 用户传递来的 地址信息
	 */
	public function create_and_save_new_address_item( $user_id ){
		if( !is_numeric( $user_id ) ){
			//提供的用户 id 不为数字 ，视为异常
			throw new Exception( 'Try to create new user address item , but given user_id isn`t numeric.' );
		}
		$name = $this->input->post( 'name' , TRUE );
		//文字信息
		$loc_city = $this->input->post( 'loc_city' , TRUE );
		$loc_province = $this->input->post( 'loc_province' , TRUE );
		$loc_town = $this->input->post( 'loc_town' , TRUE );
		//数字编码
		$city = $this->input->post( 'city' , TRUE );
		$province = $this->input->post( 'province' , TRUE );
		$town = $this->input->post( 'town' , TRUE ); 
		//详细街道信息
		$address_detail = $this->input->post( 'address_detail' , TRUE );
		//电话 
		$tel = $this->input->post( 'tel' , TRUE );
		//邮编 
		$zip = $this->input->post( 'zip' , TRUE );
		//有任意一项为空则发生异常
		if( !( $name && $loc_city && $loc_province && $loc_town && $address_detail && $tel && $zip ) ){
			throw new RuntimeException( '请填写完整的收货地址.' );
		}
		//由此生成完整的 address 信息
		$address = sprintf( "%s, %s, %s, %s, 邮编:%s, 收件人:%s, 联系电话:%s" ,
			$loc_province , $loc_city , $loc_town , $address_detail , $zip , $name , $tel );
		//需要保存的记录
		$address_new_item = array( 
                        'user_id' => $user_id ,
                        'name' => $name , 
                        'address_detail' => $address_detail ,
                        'address' => $address , 
                        'loc_city' => $loc_city , 
                        'loc_province' => $loc_province ,
                        'loc_town' => $loc_town , 
                        'city' => $city , 
                        'province' => $province ,
                        'town' => $town  , 
                        'tel' => $tel ,
                        'zip' => $zip 
		);
		//地址编号 如果该项被设置 则
		//表示该地址是被修改 而不是添加新的地址信息
		//因此@todo 现在的做法是先删除这个编号的地址信息
		//再添加一个新的
		$address_no = $this->input->post( 'address_no' , TRUE );
		if( !empty( $address_no ) ){
		        $this->del( array( 'address_no'=>$address_no ) );
			//添加 address_no 信息
			$address_new_item[ 'address_no' ] = $address_no;
		}
		//保存为新的地址
                $this->add_new( $address_new_item );
                //返回该地址
                return $address;
	} 
}
